package principal;


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import estrutura.Celula;
import estrutura.Peca;
import peca.CorPeca;
import util.Relatorio;


public class Simulador  {
	
	public static String retornaMelhor(Tabuleiro tabuleiroOriginal,CorPeca cor) {
		Tabuleiro tabuleiro = new Tabuleiro(false);
		Celula[][] celulasOriginal  = tabuleiroOriginal.getCelulas();
		
		Map<String, Integer> jogadas = new HashMap<String, Integer>();
		for (int x = 0; x < 8; x++) {
			for (int y = 0; y < 8; y++) {
					Celula celula = celulasOriginal[x][y]; 
					Peca peca = celula.getPeca();
					if(peca != null && peca.getCor() == cor){
						jogadas.putAll(Relatorio.selecionarJogadasPossiveis(celula, celulasOriginal));
					}
				}
			}

		int anterior = -99; 
    	String chave = "";
		 for (Iterator it = jogadas.keySet().iterator(); it.hasNext();) {  
	            String key = String.valueOf(it.next());
	            tabuleiro = new Tabuleiro(false);
	            tabuleiro.setCelulas(celulasOriginal);
	            
	            Console consoleB = new Console(tabuleiro, cor);
	            Celula[][] celulas = consoleB.jogarSimulacao(key);
	            int valor = pesoJogada(celulas,cor);
	            
	            if(valor > anterior){
	            	anterior = valor;
	            	chave = key; 
	            }
	            	    			        
		 }
		return chave;
		
		
		
		
	}

	private static int pesoJogada(Celula[][] celulas, CorPeca cor ) {
		Tabuleiro tabuleiro = new Tabuleiro(false);
		tabuleiro.setCelulas(celulas);
		
		
		Console consoleB = new Console(tabuleiro, CorPeca.BRANCA);
		Console consoleP = new Console(tabuleiro, CorPeca.PRETA);
		
		int acumB = 0;
		int acumP = 0;
		
		for (int k = 0; k< 1; k++) {//simula 8 jogadas
			int atualB =  Relatorio.pontos(CorPeca.BRANCA, celulas);
			int atualP = Relatorio.pontos(CorPeca.PRETA, celulas);
			//jogada branca
			String chaveB = Relatorio.simulaJogada(CorPeca.BRANCA, celulas);
			celulas = consoleB.jogarSimulacao(chaveB);
			Relatorio.imprimir(celulas);
			
			System.out.println("\n");
			
			//melhor jogada Preta 		
			String chaveP = Relatorio.simulaJogada(CorPeca.PRETA, celulas);
			celulas = consoleP.jogarSimulacao(chaveP);		
			Relatorio.imprimir(celulas);
			int futuroB =  Relatorio.pontos(CorPeca.BRANCA, celulas);
			int futuroP = Relatorio.pontos(CorPeca.PRETA, celulas);
			//Pontuacao
			int saldoB = futuroB-atualB;
			int saldoP = futuroP-atualP;
			//String resultado = String.format("Branca : %s  \nPreta : %s  \n",saldoB,saldoP);
			acumB =+saldoB;
			acumP =+saldoP;
			
		}
		if (cor == CorPeca.BRANCA) {
			return acumB -acumP;
		}else{
			return acumP - acumB;
		}
	}
}
